#ifndef _MODULESCOPE_H_
#define _MODULESCOPE_H_
#include "Scope.h"
#include "ast/Module.h"
#include "ast/VisitorBase.h"

class ModuleScope: public Scope, public VisitorBase
{
public:
    ModuleScope(const ModulePtr& moduleAst, const QFileInfo& fileName);
    virtual ~ModuleScope();
public:
    void buildScope();

    virtual void visitModule(const ModulePtr &node);
    virtual void visitImport(const ImportPtr &node);
    virtual void visitImportFrom(const ImportFromPtr &node);
    virtual void visitFunctionDef(const FunctionDefPtr &node);
    virtual void visitClassDef(const ClassDefPtr &node);

    virtual void traverse(const SimpleNodePtr&){}
    virtual void unhandled_node(const SimpleNodePtr&){}
private:
    ModulePtr _moduleAst;
    QFileInfo _fileName;
};

#endif
